home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 1997 January / macformat46.iso / Demos / PowerFantasm 4.15 / Beginners guide / GUIDE EXAMPLES / EXAMPLE9.S < prev    next >
Encoding:
Text File  |  1996-06-21  |  3.3 KB  |  94 lines

  1. ********************************************************************************
  2. *EXAMPLE 9 - CLEARING THE SCREEN                                               *
  3. *AUTHOR    - STUART BALL JULY 94                                               *
  4. *SCREEN MUST BE SET TO 256 COLOUR MODE FOR THIS EXAMPLE                        *
  5. ********************************************************************************
  6. SCREENROW:    EQU    $0106    WIDTH OF EACH SCREEN LINE
  7. DEVICELIST:    EQU    $08A8    THE ADDRESS OF DEVICELIST
  8. gdPMap_offset:    EQU    22
  9. EXAMPLE8:    MOVEM.L    A5-A6,-(SP)    SAVE MAC WORLD
  10.     BSR    INIT    INITIALISE OUR VARIABLES
  11.     BSR    CLS    CLEAR THE SCREEN
  12.  
  13.     MOVE.L    #10,D0    START X COORD OF LINE
  14.     MOVE.L    #200,D1    Y COORDINATE OF LINE
  15.     MOVE.B    #20,D2    COLOUR OF LINE
  16.     MOVE.L    #600,D3    END X COORDINATE OF LINE
  17.     BSR    DRAW_H_LINE    DRAW A HORIZONTAL LINE
  18.     MOVEM.L    (SP)+,A5-A6    RESTORE MAC WORLD
  19.     RTS
  20. ************************END OF EXAMPLE 9***************************************
  21. **INIT SETS UP OUR VARIABLES
  22. INIT:    LEA    MY_VARS(PC),A6    A6 IS OUR VARIABLE POINTER
  23.     MOVE.L    DEVICELIST,A0
  24.     MOVE.L    (A0),A0    POINT TO DEVICELIST
  25.     MOVE.L    A0,A1    COPY ADDRESS OF DEVICE LIST
  26.     MOVE.L    gdPMap_offset(A1),A1    A1=POINTER TO GDPMAP
  27.     MOVE.L    (A1),A1        gdPMap IN A1
  28.     MOVE.W    10(A1),NUMB_OF_LINES(A6)    SAVE NUMBER OF LINES
  29.     MOVE.L    (A1),VRAM_ADDR(A6)    SAVE VRAM ABSOLUTE ADDRESS
  30.     RTS
  31.     
  32. **CLS CLEARS THE MAC SCREEN TOTALLY
  33. **PRESERVES ALL REGISTERS
  34. CLS:    MOVEM.L    D0-D2/A1,-(SP)    SAVE REGS
  35.     
  36.     CLR.L    D0
  37.     CLR.L    D1
  38.     CLR.L    D2
  39.     
  40.     MOVE.L    VRAM_ADDR(A6),A1    VRAM ADDRESS IN A1
  41.     MOVE.W    NUMB_OF_LINES(A6),D0    NUMBER OF LINES ON SCREEN
  42.     SUBQ.W    #1,D0    DBcc ALWAYS LOOPS ONE MORE THAN THE COUNT
  43.     MOVE.W    SCREENROW,D1    WIDTH IN BYTES OF EACH LINE
  44.     LSR.W    #2,D1    DIVIDE BY FOUR AS WERE CLEARING LONGS
  45.     SUBQ.W    #1,D1    DBRA ALWAYS LOOPS 1 MORE THAN THE COUNT!
  46.     MOVE.W    D1,D2    SAVE SIZE OF LINE(IN BYTES)
  47.  
  48. NEXT_LINE:
  49. CLEAR_LINE:    CLR.L    (A1)+    CLEAR THIS BYTE OF VRAM AND POINT TO NEXT
  50.     DBRA    D1,CLEAR_LINE    CLEAR THIS LINE
  51.     MOVE.W    D2,D1    RESET BYTES/LINE COUNTER
  52.     DBRA    D0,NEXT_LINE    CLEAR NEXT LINE
  53.     
  54.     MOVEM.L    (SP)+,D0-D2/A1    RESTORE REGS
  55.     RTS
  56.  
  57. **DRAW_H_LINE DRAWS A HORIZONTAL LINE.
  58. **NEEDS START X COORDINATE IN D0
  59. **            Y COORDINATE IN D1
  60. **            LINE COLOUR IN D2
  61. **            END X COORDINATE IN D3
  62. DRAW_H_LINE:    MOVE.L    VRAM_ADDR(A6),A1    FOR PLOT
  63. DHL_LOOP:    BSR    PLOT    PLOT THIS PIXEL
  64.     ADD.W    #1,D0    INC X COORDINATE
  65.     CMP.W    D3,D0    COMPARE WITH END COORDINATE
  66.     BNE    DHL_LOOP    IF NOT THERE YET, DRAW NEXT PIXEL
  67.     RTS
  68.     
  69. **PLOT IS A SUBROUTINE THATS PLOTS A PIXEL ON THE SCREEN IN THE COLOUR HELD IN D2
  70. **NEEDS D0.W = X COORDINATE
  71. **      D1.W = Y COORDINATE
  72. **      D2.B = THE COLOUR
  73. **      A1   = VRAM BASE ADDRESS
  74. **ALL REGISTERS REMAIN UNAFFECTED
  75.  
  76. PLOT:    MOVEM.L    D0-D3/A1,-(SP)    SAVE THE REGISTERS WE USE
  77.     MOVE.W    SCREENROW,D3    GET PHYSICAL LENGTH OF EACH SCREEN LINE
  78.     MULS    D3,D1    Y COORDINATE TIMES THE LENGTH OF EACH LINE
  79.     ADD.L    D0,D1    VRAM ADDRESS OF THIS PIXEL
  80.     ADD.L    D1,A1    ABSOLUTE ADDRESS OF THIS PIXEL
  81.     MOVE.B    D2,(A1)    SET THE PIXEL TO THE COLOUR IN D2
  82.     MOVEM.L    (SP)+,D0-D3/A1    RESTORE THE REGS TO HOW THEY WERE
  83.     RTS        END OF SUBROUTINE PLOT
  84.     
  85.  
  86. *********************************VARIABLES FOLLOW********************************
  87.  
  88. MY_VARS:    DS.B    20    SPACE FOR OUR VARIABLES
  89.  
  90. ******************************OFFSETS INTO VARIABLES*****************************
  91.  
  92. NUMB_OF_LINES:    EQU    0    .W NUMBER OF PHYSICAL LINES ON SCREEN    
  93. VRAM_ADDR:        EQU    2    .L ABSOLUTE ADDRESS OF VRAM
  94.